package com.leinao.team.service;

import com.leinao.commons.Response;
import com.leinao.login.dto.LoginResultDto;
import com.leinao.team.dto.*;
import com.leinao.team.model.PaiTeamInfo;
import com.leinao.util.page.PageInfo;
import com.leinao.team.model.UserInfo;

import java.util.List;


/**
 * @Description 团队服务
 * @author weiwei
 * @date 2019/4/23 13:26
 * @Version 1.0
 */
public interface TeamService {

    /**
     * 功能描述: 获取团队列表
     * @param: userId 用户ID
     * @param: role 1为自己创建 0为加入团队
     * @return: List<TeamListDto> 团队list
     * @auther: huopengfei
     * @date: 2019/4/23 17:13
     */
    Response<TeamBeanDto> getTeamList(String userId, Integer role);
    /**
     * 功能描述: 获取团队列表带算力
     * @param: userId 用户ID
     * @param: role 1为自己创建 0为加入团队
     * @return: List<TeamListDto> 团队list
     * @auther: huopengfei
     * @date: 2019/4/23 17:13
     */
    Response<List<TeamListDto>> getTeamListWithPower(String userId);

    /**
      * @Description 获取团队近期算力使用情况
      * @param teamId 团队Id
      * @param daysCount    获取最近多少天的使用情况
      * @return 团队近期算力使用情况
      * @author:    weiwei
      * @Date:  2019/4/23 14:02
      */
    Response<List<TeamCalculationRecentUsageDto>> getTeamCalculationRecentUsage(Long teamId,
                                                            Integer daysCount, LoginResultDto userInfo);

    /**
     *
     * @Description:  创建团队
     * @param name : 团队名称
     * @param introduction : 团队简介
     * @param userId : 用户ID
     * @param emails : 邀请团队成员邮箱，多个以逗号隔开
     * @return: com.leinao.commons.Response<java.lang.Object>
     * @Author: 曹阳
     * @date: 2019/4/24 9:25
     *
     **/
    Response<PaiTeamInfo> creatPaiTeam (String name, String introduction, String userId, String emails);

    /**
     *
     * @Description:  添加团队成员
     * @param userId : 成员ID
     * @param teamId : 团队ID
     * @param data : 邀请链接数据
     * @return: com.leinao.commons.Response<java.lang.Object>
     * @Author: 曹阳
     * @date: 2019/4/24 9:32
     *
     **/
    Response<Void> addTeamMember (String userId, Long teamId, String data);

    /**
     *
     * @Description: 验证邀请链接
     * @param data : 邀请链接数据
     * @return: com.leinao.commons.Response<com.leinao.team.dto.TeamMemberInviteDataDto>
     * @Author: 曹阳
     * @date: 2019/4/29 16:08
     *
     **/
    Response<TeamMemberInviteDataDto> checkUrlData (String data);
    /**
     *
     * @Description:  验证用户邮箱接口
     * @param email : 用户邮箱
     * @param teamId : 团队ID
     * @return: com.leinao.commons.Response<java.lang.Object>
     * @Author: 曹阳
     * @date: 2019/4/24 15:59
     *
     **/
    Response<UserInfo> getUserInfoByEmail (String email, Long teamId);



    /**
      * 功能描述：创建团队通知
      * @param leaderId
      * @param teamId
      * @param notice
      * @Return:com.leinao.commons.Response<java.lang.Integer>
      * @Author:cuijianxin
      * @Date:2019/4/26 19:18
      */
    Response<Integer> updateNotice(String leaderId,Long teamId, String notice);

   /**
     * 功能描述：用户算例使用状态
     * @param leaderId
     * @param teamId
     * @param userId
     * @param powerStatus
     * @Return:com.leinao.commons.Response<java.lang.Integer>
     * @Author:cuijianxin
     * @Date:2019/4/26 19:18
     */
    Response<Integer> updatePowerstatus(String leaderId,Long teamId,String userId,String powerStatus);

    /**
     * 功能描述: 获取团队详情
     * @param: id 团队ID
     * @return:
     * @auther: huopengfei
     * @date: 2019/4/24 14:15
     */
    Response<PaiTeamInfo> getTeamDetail(Long id,String userId);

    /**
      * @Description    查询团队用户的算力使用情况
      * @param teamId   团队Id
      * @return     团队用户的算力使用情况
      * @author:    weiwei
      * @Date:  2019/4/24 16:18
      */
    Response<PageInfo> getTeamUserCalculationRecentUsage(Long teamId, Integer pageSize,
                                                         Integer pageNum, LoginResultDto userInfo);

    /**
     * 功能描述: 获取团队成员分页数据
     * @param: teamId
     * @param: startNum
     * @param: pageSize
     * @return:
     * @auther: huopengfei
     * @date: 2019/4/24 16:45
     */
    Response<PageInfo> getMemberDetail(String userId,Long teamId, int startNum, int pageSize);

    /**
      * 功能描述: 删除成员
      * @param userId 用户ID
      * @param teamId 团队ID
      * @Return:int
      * @Author:HuoPengfei
      * @Date:2019/4/25 14:24
      */
    Response<Integer> deleteMember(String leaderId,String userId,Long teamId);

    /**
      * 功能描述: 退出团队
      * @param userId
      * @param teamId
      * @Return:com.leinao.commons.Response<java.lang.Integer>
      * @Author:HuoPengfei
      * @Date:2019/4/25 15:10
      */
    Response<Integer> quitTeam(String userId,Long teamId);

    /**
     * 功能描述: 修改团队简介
     * @param adminId 创建人ID
     * @param introduction 团队简介
     * @param teamId 团队ID
     * @Return:com.leinao.commons.Response<java.lang.Integer>
     * @Author:HuoPengfei
     * @Date:2019/4/25 15:40
     */
    Response<Integer> updateTeamIntro(String adminId,String introduction,Long teamId);


    /**
     * @Description  团队剩余算力和已使用算力
     * @param userId  队长Id
     * @return
     * @author:    weiwei
     * @Date:  2019/4/25 15:35
     */
    Response<TeamCalculationDto> getTeamCalculation(Long teamId, LoginResultDto userInfo);
    /**
     *
     * @Description: 发送邮箱邀请连接
     * @param emails : 发送的邮箱，多个以逗号隔开
     * @param teamId : 团队ID
     * @param userId : 发送者Id
     * @return: com.leinao.commons.Response<com.leinao.util.page.PageInfo>
     * @Author: 曹阳
     * @date: 2019/4/25 15:13
     *
     **/
    Response<Void> sendTeamMemberEmail(String emails, Long teamId, String userId);

    /**
     * 功能描述: 解散团队
     * @param userId
     * @param teamId
     * @Return:com.leinao.commons.Response<java.lang.Integer>
     * @Author:HuoPengfei
     * @Date:2019/4/25 17:43
     */
    Response<Integer> disbandTeam(String userId,Long teamId);
}
